
#include <iostream>
using namespace std;
#include <string.h>
#define INF 0x3f3f3f3f
const int SZ=102;
 
int d[SZ][SZ];
int s[SZ];
 
//最大子段和
int MaxArray(int a[],int n)
{
	int m=-INF;
	int tmp=-1;
	for(int i=0;i<n;i++){
		if(tmp>0)
			tmp+=a[i];
		else
			tmp=a[i];
		if(tmp>m)
			m=tmp;
	}
	return m;
}
 
int main()
{
	int i,j,k,n;
	cin>>n;
	for(i=0;i<n;i++)    //初始化二维数组
		for(j=0;j<n;j++)
			cin>>d[i][j];
 
	int ans=-INF,tmp;
	for(i=0;i<n;i++){//遍历n*n的数组
		memset(s,0,sizeof(int)*n);  //字段和数组初始化为0
		for(j=i;j<n;j++){//从第i行开始，到第n-1行的子数组
			for(k=0;k<n;k++) //从第0列到第n-1列，计算同一行j的数之和
				s[k]+=d[j][k];
			tmp=MaxArray(s,n);  //求最大子段和
			if(tmp>ans)
				ans=tmp;
		}
	}
	cout<<ans<<endl;
	
	return 0;
}